

#ifndef DELEGATE_H
#define DELEGATE_H

/**
 * @brief The s_Deleguate struct
 */
struct s_Delegate
{
    /**
     * adresse de la fonction à executer
     */
    void* (*function) (void* args);
    /**
     * @brief arguments a faire passer dans la fonction
     */
    void* args;
} typedef Delegate;

/**
 * @brief delegate_create crée un délégué
 * @param delegate
 * @param args argument à passer à la fonction
 */
void delegate_create(Delegate** delegate, void* (*function) (void* args), void **args);

/**
 * @brief delegate_initialize initialise un délégué
 * @param delegate
 * @param args arguments à passer à la fonction
 */
void delegate_initialize(Delegate* delegate, void* (*function) (void* args), void **args);

/**
 * @brief delegate_clear efface un délégué
 * @param delegate
 */
void delegate_clear(Delegate* delegate);

/**
 * @brief delegate_destroy efface et désaloue proprement un délégué
 * @param delegate
 */
void delegate_destroy(Delegate** delegate);

#endif
